﻿@page "/派单/{Parameter}"
@using System.Diagnostics.CodeAnalysis
@inject SqlSugarScope _SqlSugarScope
@inject ToastService ToastService
@inject AuthenticationStateProvider authenticationStateProvider
@inject AuthenticationStateProvider customAuthenticationStateProvider
@inject NavigationManager NavigationManager
@rendermode InteractiveServer
<BootstrapBlazorRoot>
    <h3>派单</h3>
@*     <ValidateForm Model="@bus合同分拆" OnFieldValueChanged="@OnFiledChanged"
              OnValidSubmit="@OnValidSubmit1" OnInvalidSubmit="@OnInvalidSubmit1">
 *@
    
    <div class="row g-3">

        <div class="col-4">
                <BootstrapInput PlaceHolder="" @bind-Value="@bus合同分拆.结算类型" IsDisabled="true"
                            DisplayText="结算类型" ShowLabel="true" />
        </div>
        <div class="col-4">
            <BootstrapInput PlaceHolder="" @bind-Value="@bus合同分拆.项目任务明细规格" IsDisabled="true"
                            DisplayText="规格" ShowLabel="true" />
        </div>
        <div class="col-4">
            <BootstrapInputNumber PlaceHolder="数量" @bind-Value="@bus合同分拆.本次派工数量"
                            DisplayText="数量" ShowLabel="true" />
        </div>
        <div class="col-4">
            <BootstrapInputNumber PlaceHolder="单价" @bind-Value="@bus合同分拆.项目任务明细含税单价"
                            DisplayText="单价" ShowLabel="true" />
        </div>
        <div class="col-4">
            <BootstrapInput PlaceHolder="单位" @bind-Value="@bus合同分拆.单位"
                            DisplayText="单位" ShowLabel="true" />
        </div>
    </div>
    <div class="row g-3">
        <div class="col-4">
            <BootstrapInput PlaceHolder="任务名称" @bind-Value="@bus合同分拆.任务名称"
                            DisplayText="任务名称" ShowLabel="true" />
        </div>
        <div class="col-4">
            <RadioList DisplayText="工期类型" ShowLabel="true" Items="@工期类型s" @bind-Value="@bus合同分拆.工期类型"></RadioList>
        </div>
        <div class="col-4">
            <RadioList DisplayText="分拆类型" ShowLabel="true" Items="@分拆类型s" @bind-Value="@bus合同分拆.分拆类型" OnSelectedChanged="@On分拆类型ItemChanged"></RadioList>
        </div>
    </div>

    <div class="row g-3">
        <div class="col-6">
            <Select IsVirtualize="true" ShowLabel="true" DisplayText="定额类型" Items="定额类型s" @bind-Value="@bus合同分拆.定额类型" OnSelectedItemChanged="@on定额类型SelectedItemChanged"></Select>
        </div>
        <div class="col-6">
            <Select IsVirtualize="true" ShowLabel="true" DisplayText="定额内容" Items="定额内容s" @bind-Value="@bus合同分拆.定额名称"></Select>
        </div>
        <div class="col-6">
            <Select IsVirtualize="true" ShowLabel="true" DisplayText="班组" Items="班组s" @bind-Value="@bus合同分拆.班组id"></Select>
        </div>
    </div>

    <div class="row g-3">
        <div class="col-4">
            <BootstrapInput PlaceHolder="作业地点" @bind-Value="@bus合同分拆.作业地点"
                            DisplayText="作业地点" ShowLabel="true" />
        </div>
    </div>

    <div class="row g-3">
        <div class="col-sm-6">
            <Checkbox @ref="不检查时间" TValue="string" DisplayText="不检查时间" ShowLabel="true" Color="BootstrapBlazor.Components.Color.Danger" State="CheckboxState.UnChecked" />
        </div><div class="col-sm-6">
            <DateTimePicker @bind-Value="@bus合同分拆.工作开始时间" ShowLabel="true" DisplayText="工作开始时间" ViewMode="DatePickerViewMode.DateTime" AutoClose = "false"/>
        </div>
        <div class="col-sm-6">
            <DateTimePicker @bind-Value="@bus合同分拆.工作结束时间" ShowLabel="true" DisplayText="工作结束时间" ViewMode="DatePickerViewMode.DateTime" AutoClose = "false"/>
        </div>
    </div>

    <div class="row g-3">
        <div class="col-sm-6">
            <BootstrapInput @bind-Value="@bus合同分拆.交代事项" ShowLabel="true" DisplayText="交代事项" IsTrim="true"/>
        </div>
    </div>

     <div class="row g-3">
     <div class="col-6">
            <Select IsVirtualize="true" ShowLabel="true" DisplayText="大类" Items="大类s" @bind-Value="@大类" OnSelectedItemChanged="@on大类SelectedItemChanged"></Select>
        </div>
    </div>

    <div class="row g-3">
    <div class="col-12 col-sm-6">
            <MultiSelect Items="@大类小类s" @bind-Value="@大类小类选中项" ShowLabel="true" DisplayText="名称" />
    </div>
@*     <div class="col-12 col-sm-6">
        <Button Icon="fa-regular fa-trash-can" Text="清空" OnClick="@ClearItems" />
    </div> *@
</div>

 <div class="row g-3">
      <ul class="ul-demo mb-3">
      @if(选中的bus_外包合同主表 != null && 选中的bus_外包合同明细 != null)
      {
                <li  >  <BootstrapInput  @bind-Value="@bus合同分拆.外包ID"/></li>
                <li>  <BootstrapInput @bind-Value="@bus合同分拆.外包明细ID" /></li>
                <li>@选中的bus_外包合同主表.guid</li>
                <li>@选中的bus_外包合同明细.bguid</li>
                <li>@选中的bus_外包合同主表.合同乙方名称</li>
                <li>@选中的bus_外包合同明细.名称</li>
                <li>@选中的bus_外包合同明细.含税单价</li>
      }
        </ul>

            

</div>
 <div class="row g-3">
        <div class="col-12 col-sm-6">
            <Button OnClick="() => SmallModal.Toggle()" IsDisabled="@不可以选外包">选择外包行</Button>
    </div>
    <Modal @ref="SmallModal">
            <ModalDialog ShowResize="true" Title="选择外包行" ShowSaveButton="true">
            <BodyTemplate>
                    <Table TItem="Bus_外包合同主表" 
                           IsPagination="true" Items="@bus_外包合同主表List"
                           IsStriped="true" IsBordered="true" ClickToSelect="true"
                           ShowToolbar="true" ShowDefaultButtons="false"
                            ShowDetailRow="ShowDetailRow">
                        <TableColumns>
                            <TableColumn @bind-Field="@context.项目名称" Width="180" />
                            <TableColumn @bind-Field="@context.合同乙方名称" Width="100" />
                            <TableColumn @bind-Field="@context.乙方项目经理" />
                        </TableColumns>
                        <DetailRowTemplate>
                            <Table TItem="Bus_外包合同明细" IsBordered="true" ClickToSelect="true" ShowToolbar="false" Items="@GetDetailDataSource(context)" ShowExtendButtons="true" ShowExtendEditButton="false" ShowExtendDeleteButton="false" ExtendButtonColumnWidth="240">
                                <TableColumns Context="Detail">
                                    <TableColumn @bind-Field="@Detail.行号" />
                                    <TableColumn @bind-Field="@Detail.项目类型" Width="180" />
                                    <TableColumn @bind-Field="@Detail.名称" Width="70" />
                                    <TableColumn @bind-Field="@Detail.数量" Width="70" />
                                    <TableColumn @bind-Field="@Detail.单位" Width="70" />
                                    <TableColumn @bind-Field="@Detail.含税单价" Width="70" />
                                    <TableColumn @bind-Field="@Detail.备注" Width="70" />
                                </TableColumns>
                                <RowButtonTemplate Context="DetailContext">
                                    <TableCellButton Icon="fa-solid fa-pen" Text="选择" OnClick="@(() => OnRowButtonClick(DetailContext, "选择"))" />
            </RowButtonTemplate>
                            </Table>
                        </DetailRowTemplate>
                    </Table>
            </BodyTemplate>
        </ModalDialog>
    </Modal>
    </div>

    <div class="row g-3">
    <div class="col-12 col-sm-12">
            <Button ButtonType="BootstrapBlazor.Components.ButtonType.Submit" OnClick="保存">-------保存-------</Button>
    </div>
    </div>
    @* </ValidateForm> *@
</BootstrapBlazorRoot>

@code {
    [Parameter]
    public string Parameter { get; set; }
    [NotNull]
    private Modal? SmallModal { get; set; }
    private Checkbox<string>? 不检查时间 { get; set; }

    private string 分拆类型 = "";
    private string 分拆的状态 = "";
    private bool 不可以选外包 = true;
    private Bus_项目任务明细 bus_项目任务明细 { get; set; }
    private string 大类 = "";

    // private Bus_合同分拆 bus合同分拆 = new Bus_合同分拆();
    [NotNull]
    private Bus_合同分拆 bus合同分拆 = new Bus_合同分拆();
    private Bus_合同主表 bus合同主表 = new Bus_合同主表();



    private List<Bus_外包合同主表> bus_外包合同主表List = new List<Bus_外包合同主表>();
    private Bus_外包合同明细 选中的bus_外包合同明细 = null;
    private Bus_外包合同主表 选中的bus_外包合同主表 = null;

    private List<SelectedItem> 分拆类型s = new List<SelectedItem>
    {
        new ("自建", "自建" ),
        new  ( "外包", "外包" ),
        new  ( "内包", "内包" )
    };

    private List<SelectedItem> 工期类型s = new List<SelectedItem>
    {
        new ("长期单", "长期单" ),
        new  ( "日常单", "日常单" )
    };
    private List<SelectedItem> 定额类型s = new List<SelectedItem>();
    private List<SelectedItem> 定额内容s = new List<SelectedItem>();
    private List<SelectedItem> 班组s = new List<SelectedItem>();
    private List<SelectedItem> 大类s = new List<SelectedItem>();
    private List<SelectedItem> 大类小类s = new List<SelectedItem>();
    private string 大类小类选中项  { get;set;}
    private string username;
    protected override async Task OnInitializedAsync()
    {
        var authState = await customAuthenticationStateProvider.GetAuthenticationStateAsync();
        var user = authState.User;
        username = user.Identity.Name;
        Guid.TryParse(Parameter, out Guid guid);

        bus_项目任务明细 = _SqlSugarScope.Queryable<Bus_项目任务明细>().Where(it => it.bguid == guid).First();
        bus合同主表 = _SqlSugarScope.Queryable<Bus_合同主表>().Where(it => it.guid == bus_项目任务明细.guid).First();
        bus合同分拆.任务名称 = bus_项目任务明细.名称;
        bus合同分拆.项目任务明细名称 = bus_项目任务明细.名称;
        bus合同分拆.结算类型 = bus_项目任务明细.结算类型;
        bus合同分拆.项目任务明细规格 = bus_项目任务明细.规格;
        bus合同分拆.本次派工数量 = bus_项目任务明细.数量;
        bus合同分拆.项目任务明细含税单价 = bus_项目任务明细.含税单价;
        bus合同分拆.单位 = bus_项目任务明细.单位;
        初始化定额类型();
        初始化大类();
        初始化班组("自建");
        bus_外包合同主表List = _SqlSugarScope.Queryable<Bus_外包合同主表>().Where(it => it.总合同guid == bus_项目任务明细.guid).ToList();
    }
    //显示之后的方法
    protected override async Task OnAfterRenderAsync(bool firstRender)
    {
        if (bus_项目任务明细 == null)
        {
            await Task.Delay(100);
            var cate = ToastCategory.Success;
            var title = $"无数据";
            var content = "没用任务单数据";
            await ToastService.Show(new ToastOption() { Category = cate, Title = title, Content = content });
        }
    }

    private static bool ShowDetailRow(Bus_外包合同主表 item) => true;

    private List<Bus_外包合同明细> GetDetailDataSource(Bus_外包合同主表 bus)
    {
        List<Bus_外包合同明细> bus_s = _SqlSugarScope.Queryable<Bus_外包合同明细>()
                                      .Where(it => it.guid == bus.guid).ToList();
        return bus_s;
    }
    //选择外包合同
    private async Task OnRowButtonClick(Bus_外包合同明细 item, string text)
    {
        选中的bus_外包合同明细 = item;
        //跳转到派单页面，并携带guid
        选中的bus_外包合同主表 = _SqlSugarScope.Queryable<Bus_外包合同主表>()
                                      .Where(it => it.guid == 选中的bus_外包合同明细.guid).First();
        bus合同分拆.外包ID = 选中的bus_外包合同主表.guid;
        bus合同分拆.外包明细ID = 选中的bus_外包合同明细.bguid;
        //关闭Modal
        SmallModal.Close();
    }
    private Task On分拆类型ItemChanged(IEnumerable<SelectedItem> values, string val)
    {
        var value = values.FirstOrDefault();
        // Logger.Log($"{"组件选中值:"} {value?.Value}  {"显示值:"}{value?.Text}  {"组件 Value 值:"}{val}");
        选中的bus_外包合同明细 = null;
        选中的bus_外包合同主表 = null;
        bus合同分拆.外包ID = null;
        bus合同分拆.外包明细ID = null;
        //自建
        if (value?.Value == "自建")
        {
            分拆类型 = "自建";
            分拆的状态 = "未派工";
            //查自建的定额
            初始化定额类型();
            // panelControl选择外包.Visible = false;
            初始化班组("自建");
            不可以选外包 = true;
        }
        //外包
        if (value?.Value == "外包")
        {
            分拆类型 = "外包";
            分拆的状态 = "已派工";
            //查外包的定额
            定额类型s.Clear();
            定额内容s.Clear();
            // panelControl选择外包.Visible = true;
            初始化班组("外包");
            不可以选外包 = false;
        }

        //内保
        if (value?.Value == "内包")
        {
            分拆类型 = "内包";
            分拆的状态 = "未派工";
            //把定额清空
            初始化定额类型();
            初始化班组("内包");
            不可以选外包 = true;
        }
        return Task.CompletedTask;
    }

    private Task on定额类型SelectedItemChanged(SelectedItem value)
    {
        初始化定额内容(value?.Value);
        return Task.CompletedTask;
    }   

    private Task on大类SelectedItemChanged(SelectedItem value)
    {
        初始化大类小类字段();
        return Task.CompletedTask;
    }

    private void 初始化大类小类字段()
    {
        大类小类s = _SqlSugarScope.Queryable<Dic_大类小类>()
                                                    .Where(it => it.大类 == 大类)    
                                                    .Select(it => new SelectedItem { Text = it.名称, Value = it.名称 })
                                                    //.OrderBy(it => it.序号)
                                                    .ToList();

    }

    public void 初始化定额类型()
    {
        定额类型s = _SqlSugarScope.Queryable<Dic_定额档案>().Distinct().Select(it => new SelectedItem { Text = it.定额类型, Value = it.定额类型 })
                                                           .OrderBy(it => it.Text).ToList();
        // bus合同分拆.定额类型 = 定额类型s.First().Text;
        初始化定额内容(bus合同分拆?.定额类型);
    }

    public void 初始化定额内容(string 定额类型)
    {
        定额内容s = _SqlSugarScope.Queryable<Dic_定额档案>().Distinct()
                                                        .Where(it => it.定额类型 == 定额类型)
                                                       .Select(it => new SelectedItem { Text = it.定额内容, Value = it.id.ToString() })
                                                       .OrderBy(it => it.Text).ToList();
        定额内容s.Insert(0, new SelectedItem("", ""));
        if (bus合同分拆 != null)
        {
            bus合同分拆.定额名称 = "";
        }
    }

    private void 初始化班组(string 班组类型)
    {
        if (班组类型 == "自建")
        {
            班组s = _SqlSugarScope.Queryable<Dic_班组字典>()
                                      .Where(it => !it.班组.Contains("外协"))
                                       .Select(it => new SelectedItem { Text = it.班组, Value = it.guid.ToString() })
                                        .OrderBy(it => it.Text)
                                      .ToList();
        }

        if (班组类型 == "外包")
        {

            班组s = _SqlSugarScope.Queryable<Dic_班组字典>()
                                      .Where(it => it.班组.Contains("外协"))
                                       .Select(it => new SelectedItem { Text = it.班组, Value = it.guid.ToString() })
                                         .OrderBy(it => it.Text)
                                      .ToList();
        }

        if (班组类型 == "内包")
        {
            班组s = _SqlSugarScope.Queryable<Dic_班组字典>()
                                      .Where(it => !it.班组.Contains("外协"))
                                       .Select(it => new SelectedItem { Text = it.班组, Value = it.guid.ToString() })
                                         .OrderBy(it => it.Text)
                                      .ToList();
        }
    }

    private  void 初始化大类()
    {
        大类s = _SqlSugarScope.Queryable<Dic_大类小类>().Distinct()
                                                        .Select(it => new SelectedItem { Text = it.大类, Value = it.大类 })
                                                       //.OrderBy(it => it.序号)
                                                       .ToList();
        大类s.Insert(0, new SelectedItem("",""));
    }

    private void 保存()
    {
        if (validate() == true)
        {
            分拆(分拆类型, 分拆的状态);
            //更新合同主表项目状态为执行中
            string sql = $@"update Bus_合同主表 set 项目状态 = '执行中' where guid = '{bus合同主表.guid}'";
            int r = _SqlSugarScope.Ado.ExecuteCommand(sql);
            if (r <= 0)
            {
                ToastService.Error("项目状态更新失败");
            }
        }
    }
    private void 分拆(string 分拆类型, string 分拆状态)
    {
        Bus_项目任务明细 bus选中项目任务明细 = bus_项目任务明细;
        Dic_班组字典 dic_班组字典 = _SqlSugarScope.Queryable<Dic_班组字典>().Where(it => it.guid == bus合同分拆.班组id).First();

        int 分拆次序 = 获取合同分拆次数(bus选中项目任务明细.行号);
        string 分拆编号 = 分拆次序.ToString();
        Random random = new Random();
        SnowFlakeSingle.WorkId = random.Next(1, 30);
        long 分拆组号 = SnowFlakeSingle.Instance.NextId();//也可以在程序中直接获取ID.;

        //分拆次序 = SqlSugarHelp.scope.Queryable<Model.dbmodel.Bus_合同分拆>().Where(it => it.总包合同ID == bus合同主表.guid).Max(it => it.分拆次序).GetValueOrDefault();
        List<Bus_合同分拆> bus合同分拆s = new List<Bus_合同分拆>();

        // Bus_合同分拆 bus合同分拆 = new Bus_合同分拆();
        bus合同分拆.guid = Guid.NewGuid();
        bus合同分拆.分拆组号 = 分拆组号;
        bus合同分拆.分拆次序 = 分拆次序;
        // bus合同分拆.分拆类型 = 分拆类型;
        bus合同分拆.分拆编号 = bus合同主表.合同编号 + "-" + bus选中项目任务明细.行号 + "#" + bus合同分拆.分拆次序;
        // bus合同分拆.工期类型 = radioGroup工期类型.EditValue.ToString();
        bus合同分拆.单据类型 = "经理单";
        bus合同分拆.总包合同编号 = bus合同主表.合同编号;
        bus合同分拆.总包合同项目名称 = bus合同主表.项目名称;
        bus合同分拆.总包合同ID = bus合同主表.guid;
        bus合同分拆.项目经理 = bus合同主表.乙方项目经理;

        bus合同分拆.项目任务行号 = bus选中项目任务明细.行号;
        bus合同分拆.项目任务明细ID = bus选中项目任务明细.bguid;
        // bus合同分拆.项目任务明细名称 = textEdit名称.Text;
        // decimal.TryParse(textEdit单价.Text, out decimal 含税单价);

        // bus合同分拆.项目任务明细含税单价 = 含税单价;
        // bus选中项目任务明细.含税单价 = 含税单价;

        // bus选中项目任务明细.名称 = textEdit名称.Text;
        // bus合同分拆.项目任务明细规格 = textEdit规格.Text;
        // bus选中项目任务明细.规格 = textEdit规格.Text;
        // decimal.TryParse(textEdit数量.Text.Trim(), out decimal 数量);
        // bus选中项目任务明细.数量 = 数量;
        // bus合同分拆.本次派工数量 = 数量;
        // bus合同分拆.交代事项 = textEdit交代事项.Text;
        // bus合同分拆.作业地点 = textEdit作业地点.Text;
        // bus合同分拆.任务名称 = textEdit名称.Text;
        // bus合同分拆.单位 = textEdit单位.Text;

        bus合同分拆.结算类型 = bus选中项目任务明细.结算类型;
        bus合同分拆.结算周期 = bus选中项目任务明细.结算周期;
        bus合同分拆.结算金额 = bus选中项目任务明细.结算金额;
        bus合同分拆.结算开始日期 = bus选中项目任务明细.结算开始日期;
        bus合同分拆.结算结束日期 = bus选中项目任务明细.结算结束日期;

        // bus合同分拆.定额类型 = lookUpEdit定额类型.EditValue?.ToString();
        if (bus合同分拆.分拆类型 != "外包" && string.IsNullOrEmpty(bus合同分拆.定额名称) == false && bus合同分拆.定额名称 != "请选择")
        {
            Dic_定额档案 dic定额档案 = _SqlSugarScope.Queryable<Dic_定额档案>()
                                                .Where(it => it.定额内容 == bus合同分拆.定额名称
                                             && it.定额类型 == bus合同分拆.定额类型).First();
            if (dic定额档案 == null)
            {
                //提示定额档案里没有这个定额
                ToastService.Error($"班组{dic_班组字典.班组}定额档案里没有这个定额，如果定额不确定可以先空着", "提示");
                return;
            }
            else
            {
                bus合同分拆.定额编号 = dic定额档案?.编码;
                bus合同分拆.定额名称 = dic定额档案?.定额内容;
                bus合同分拆.定额单价 = dic定额档案?.定额单价;
            }
        }

        //测绘的分拆类型应该是内包
        if (bus合同分拆.定额类型.Contains("测绘") == true && bus合同分拆.分拆类型 != "内包")
        {
            //提示分拆类型应该是内包
            ToastService.Error("测绘的分拆类型应该是内包", "提示");
            return;
        }

        // //如果定额类型是测绘，检查班组是不是选的肖洋
        // if (bus合同分拆.定额类型.Contains("测绘") == true && dic_班组字典.班组.Contains("测绘") == false)
        // {
        //     //提示是否确定把测绘项目不给测绘班组？
        //     if (XtraMessageBox.Show("是否确定测绘项目不给测绘班组？", "提示", MessageBoxButtons.YesNo) == DialogResult.No)
        //     {
        //         return;
        //     }
        // }

        //bus合同分拆.任务名称 = uiTextBox任务名称.Text;

        //定额从合同带出

        //bus合同分拆.定额类型 = bus合同明细.定额类型;
        //bus合同分拆.定额名称 = bus合同明细.定额内容;

        //不带秒的时间
        // DateTime 工作开始时间 = dateEdit工期开始.DateTime;
        // DateTime 工作结束时间 = dateEdit工期结束.DateTime;
        //decimal.TryParse(uiTextBox分拆数量.Text.Trim(), out decimal 分拆数量);
        //bus合同分拆.本次分拆数量 = 分拆数量;

        if (不检查时间.State == CheckboxState.UnChecked && 检查人员在已派工时间是否冲突(dic_班组字典.班组, bus合同分拆.工作开始时间, bus合同分拆.工作结束时间))
        {
            ToastService.Error($"{dic_班组字典.班组}已经有安排了，请换个时间");
            return;
        }
        //检查这个班组的时间不要重复

        bus合同分拆.班组 = dic_班组字典.班组;
        bus合同分拆.班组id = dic_班组字典.guid;



        // bus合同分拆.工作开始时间 = 工作开始时间;
        // bus合同分拆.工作结束时间 = 工作结束时间;

        // Bus_外包合同主表 bus = 派单外包合同选择dto.bus外包合同主表;
        // Bus_外包合同明细 bus选择外包合同行 = 派单外包合同选择dto.bus外包合同明细;
        // bus合同分拆.外包ID = bus?.guid;
        // bus合同分拆.外包明细ID = bus选择外包合同行?.bguid;
        bus合同分拆.外包明细名称 = 选中的bus_外包合同明细?.名称;
        bus合同分拆.外包明细规格 = 选中的bus_外包合同明细?.规格;
        bus合同分拆.外包明细型号 = 选中的bus_外包合同明细?.型号;
        bus合同分拆.外包明细单位 = 选中的bus_外包合同明细?.单位;
        bus合同分拆.外包含税单价 = 选中的bus_外包合同明细?.含税单价;
        bus合同分拆.外包含税金额 = 选中的bus_外包合同明细?.含税金额;
        bus合同分拆.外包合同备注 = 选中的bus_外包合同明细?.备注;
        if (分拆类型 == "外包")
        {
            bus合同分拆.分拆状态 = "已派工";
        }
        else
        {
            bus合同分拆.分拆状态 = "未派工";
        }

        bus合同分拆.CreateDate = DateTime.Now;
        // bus合同分拆.CreateID = Pub.SysUser.User_Id;
        bus合同分拆.Creator = username;

        //遍历gridcontrol1的行
        List<Bus_合同派工搜集信息> bus合同分拆详细s = new List<Bus_合同派工搜集信息>();
        if (大类小类选中项 != null)
        {
            string[] 选中项 = 大类小类选中项.Split(',',StringSplitOptions.RemoveEmptyEntries);
            foreach (string item in 选中项)
            {
                Bus_合同派工搜集信息 bus合同分拆详细 = new Bus_合同派工搜集信息();
                bus合同分拆详细.guid = Guid.NewGuid();
                bus合同分拆详细.合同分拆guid = bus合同分拆.guid;
                //bus合同分拆详细.序号 = 分拆次序 + 1;
                bus合同分拆详细.大类 = 大类;
                bus合同分拆详细.名称 = item;
                bus合同分拆详细.CreateDate = DateTime.Now;
                // bus合同分拆详细.CreateID = Pub.SysUser.User_Id;
                bus合同分拆详细.Creator = username;
                bus合同分拆详细s.Add(bus合同分拆详细);
            }
        }





        bus合同分拆s.Add(bus合同分拆);
        //加个其它
        //Bus_合同分拆 bus合同分拆 = new Bus_合同分拆();
        //bus合同分拆.guid = Guid.NewGuid();
        //bus合同分拆.分拆组号 = 分拆组号;
        //bus合同分拆.分拆次序 = (int.Parse(分拆次序) + i).ToString();
        //bus合同分拆.分拆编号 = (int.Parse(分拆编号) + i).ToString();
        //bus合同分拆.分拆类型 = 分拆类型;
        //DateTime 工作开始时间 = pub.返回忽略秒的时间(uiDatetimePicker工作开始时间.Value);
        //DateTime 工作结束时间 = pub.返回忽略秒的时间(uiDatetimePicker工作结束时间.Value);
        //bus合同分拆.工作开始时间 = 工作开始时间;
        //bus合同分拆.工作结束时间 = 工作结束时间;
        //bus合同分拆.分拆状态 = "未派工";
        //bus合同分拆.CreateDate = DateTime.Now;
        //bus合同分拆.CreateID = pub.sys_user.User_Id;
        //bus合同分拆.Creator = pub.sys_user.UserName;
        // bus选中项目任务明细.Modifier = Pub.SysUser.UserName;
        // bus选中项目任务明细.ModifyDate = DateTime.Now;
        // bus选中项目任务明细.ModifyID = Pub.SysUser.User_Id;
        try
        {
            _SqlSugarScope.BeginTran();
            // SqlSugarHelp.scope.Updateable(bus选中项目任务明细).ExecuteCommand();
            int r = 0;
            r = _SqlSugarScope.Insertable(bus合同分拆s).ExecuteCommand();
            _SqlSugarScope.Insertable(bus合同分拆详细s).ExecuteCommand();
            _SqlSugarScope.CommitTran();
            if (r <= 0)
            {
                ToastService.Error("分拆失败，请联系管理员");
            }
            else
            {
                ToastService.Success("分拆成功");
                //返回上层界面
                NavigationManager.Refresh();
            }
        }
        catch (Exception)
        {
            _SqlSugarScope.RollbackTran();
        }

    }

    internal  bool 检查人员在已派工时间是否冲突(string 人员, DateTime? 工作开始时间, DateTime? 工作结束时间)
    {
        var flag = _SqlSugarScope.Queryable<Bus_合同分拆确认>().Where(it => it.人员姓名 == 人员
                && (it.分拆状态 == "已派工" || it.分拆状态 == "已报工")
                && (SqlFunc.Between(it.工作开始时间, 工作开始时间, 工作结束时间)
                    || (SqlFunc.Between(it.工作结束时间, 工作开始时间, 工作结束时间)
                    || (it.工作开始时间 <= 工作开始时间 && it.工作结束时间 >= 工作结束时间)
                    || (it.工作开始时间 >= 工作开始时间 && it.工作结束时间 <= 工作结束时间)
                    ))).Any();
        return flag;
    }

    private int 获取合同分拆次数(int? 任务行号)
        {
            int 分拆次序 = 0;
            string 分拆编号 = "";
            Random random = new Random();
            SnowFlakeSingle.WorkId = random.Next(1, 30);
            long 分拆组号 = SnowFlakeSingle.Instance.NextId();//也可以在程序中直接获取ID.;

        分拆次序 = _SqlSugarScope.Queryable<Bus_合同分拆>()
                .Where(it => it.总包合同ID == bus合同主表.guid && it.项目任务行号 == 任务行号)
                .Max(it => it.分拆次序).GetValueOrDefault();
            return 分拆次序 + 1;
        }


    private bool validate()
    {
        bool flag = true;


        if (bus合同分拆.分拆类型 == "未定")
        {
           ToastService.Error("请选择分拆类型");
            flag = false;
        }

        if (bus合同分拆.班组id == null)
        {
            ToastService.Error("请选择班组");
            flag = false;
        }

        if (string.IsNullOrEmpty(bus合同分拆.单位) == true)
        {
            ToastService.Error("请输入单位");
            flag = false;
        }
        if (string.IsNullOrEmpty(bus合同分拆.项目任务明细名称) == true)
        {
            ToastService.Error("请输入任务名称");
            flag = false;
        }
        if (bus合同分拆.分拆类型 == "外包")
        {
            if (bus合同分拆.外包ID == null || bus合同分拆.外包明细ID == null)
            {
                ToastService.Error( "请选择外包合同");
                flag = false;
            }
        }

        if (bus合同分拆.分拆类型 != "外包" && string.IsNullOrEmpty(bus合同分拆.定额类型) == true)
        {
            ToastService.Error("请选择定额类型");
            flag = false;
        }

        if (bus合同分拆.定额类型.Contains("疏通"))
        {
            if (string.IsNullOrEmpty(bus合同分拆.定额名称) == true)
            {
                ToastService.Error("疏通类项目必须选择定额名称，如果没有请联系李银银加");
                flag = false;
                return flag;
            }
            if (bus合同分拆.定额名称 != bus合同分拆.任务名称)
            {
                ToastService.Information("疏通类项目任务名称需要和定额名称一致");
                flag = false;
                return flag;
            }
        }
        if (bus合同分拆.工作开始时间 == null)
        {
            ToastService.Error("请选择工期开始时间");
            flag = false;
        }
        if (bus合同分拆.工作结束时间 == null)
        {
            ToastService.Error("请选择工期结束时间");
            flag = false;
        }

        if (bus合同分拆.工作开始时间 >= bus合同分拆.工作结束时间)
        {
            ToastService.Error("工作开始时间不能大于工作结束时间");
            flag = false;
        }
        return flag;
    }

    // private async Task OnInvalidSubmit1(EditContext context)
    // {
    //     await Task.Delay(1000);
    //     ToastService.Information("OnInvalidSubmit 回调委托: 验证未通过");
    // }

    // private async Task OnValidSubmit1(EditContext context)
    // {
    //     await Task.Delay(1000);
    //     ToastService.Information("OnValidSubmit 回调委托: 验证通过");
    // }

    // private void OnFiledChanged(string field, object? value)
    // {
    //     ToastService.Information($"{field}:{value}");
    // }
}
